//app.js
const APP_KEY = 'mnatJkOwYbULvTpVr';
const { AppDevSdk } = require('qcloud-iotexplorer-appdev-sdk');
const promisify = require('./libs/wx-promisify');

App({
  onLaunch: function () {
   
    // 初始化 SDK
    this.sdk = new AppDevSdk({
      debug: true,
      appKey: APP_KEY,
      getAccessToken: this.getAccessToken,
      wsConfig: {}
    });
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        env: 'iot-gh133',
        traceUser: true,
      })
    }


    this.globalData = {
      userInfo: wx.getStorageSync('userInfo') || null,
    }  
  },


  async getAccessToken() {
    // 小程序配置指引
    if (APP_KEY === 'YOUR_APP_KEY_HERE') {
      throw { msg: '请在 miniprogram/app.js 文件中填写 APP_KEY', code: 'INVALID_APP_KEY' };
    }

    // 小程序用户信息
    // 在 page-wrapper 组件中请求获取，写入到 app.globalData.userInfo
    const { userInfo } = this.globalData;

    // 是否需要注册
    const needRegister = !this.getIsRegisteredSync() && !!userInfo;

    // 注册/登录参数，注册时需要传入用户昵称和头像，下次登录时可以不传入
    const loginParams = needRegister ? {
      Avatar: userInfo.avatarUrl,
      NickName: userInfo.nickName,
    } : {};

    try {
      // 云函数 (cloudfunctions/login/index.js) 中调用 微信号注册登录 应用端 API
      // 获取物联网开发平台的 AccessToken
      // 请参见 https://cloud.tencent.com/document/product/1081/40781

      const res = await wx.cloud.callFunction({
        // 云函数名称
        name: 'login',
        // 传给云函数的参数
        data: loginParams,
      });

      const { code, msg, data } = res.result;

      // 异常处理
      if (code) {
        throw { code, msg };
      }
      console.log('res：',res);
      // 取得 AccessToken
      const { Token, ExpireAt } = data.Data;

      // 标记为已注册状态，下次登录时不需要请求获取用户昵称和头像
      await this.setIsRegistered();
  
      return { Token, ExpireAt };
    } catch (err) {
      // 云函数部署指引
      if (err.errMsg && err.errMsg.indexOf('找不到对应的FunctionName') > -1) {
        throw { code: 'CLOUDFUNC_NOT_FOUND', msg: '请创建并部署 cloudfunctions/login 中的云函数到云开发' };
      }
      throw err;
    }
  },
   getIsRegisteredSync() {
    return !!wx.getStorageSync('iot-explorer-user-registered');
  },

  async setIsRegistered(isRegistered = true) {
    if (!isRegistered) {
      return promisify(wx.removeStorage)({
        key: 'iot-explorer-user-registered',
      });
    }

    return promisify(wx.setStorage)({
      key: 'iot-explorer-user-registered',
      data: isRegistered,
    });
  },
})
